import os
from dotenv import load_dotenv
import pymysql
import pytest

# 加载 .env 文件中的环境变量
load_dotenv()

# 从环境变量中获取数据库配置
db_config = {
    'host': os.getenv('DB_HOST'),
    'port': int(os.getenv('DB_PORT')),
    'user': os.getenv('DB_USER'),
    'password': os.getenv('DB_PASSWORD'),
    'database': os.getenv('DB_NAME'),
    'charset': 'utf8mb4',  # 避免中文乱码
    'cursorclass': pymysql.cursors.DictCursor  # 返回字典格式的查询结果
}


# 定义 session 级别的数据库连接 Fixture
@pytest.fixture(scope="session")
def db_connection():
    """
    初始化数据库连接，并在整个测试会话中复用
    """
    connection = None
    try:
        # 建立 MySQL 连接
        connection = pymysql.connect(**db_config)
        print("数据库连接成功！")
        yield connection  # 将连接对象传递给测试用例
    except pymysql.Error as e:
        print(f"数据库连接失败: {e}")
        raise  # 抛出异常，让测试用例感知连接问题
    finally:
        # 无论测试是否成功，都要关闭连接释放资源
        if connection and connection.open:
            connection.close()
            print("数据库连接已关闭！")
